﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CAD.BLL;
using CAD.DTO;

namespace WFASmartketing.PRESENTACION_VENTAS
{
    public partial class RegistroPagoVenta : Form
    {
        private FrmPrincipal principal;
        public RegistroPagoVenta(FrmPrincipal principal)
        {
            InitializeComponent(); 
            this.principal = principal;
            recargarGrid();
            rbbanco.Checked = true;
            cbxdestino.DropDownStyle = ComboBoxStyle.DropDownList;
            cbxnrocuenta.DropDownStyle = ComboBoxStyle.DropDownList;
            cbxvendedor.DropDownStyle = ComboBoxStyle.DropDownList;
        }
        private void recargarGrid()
        {
            DateTime ini = dtcini.Value;
            DateTime fin = dtcfin.Value;
            this.pagoventa_ListaVentasParaGridPagosTableAdapter.Fill(this.ventasConPagosPendientes.pagoventa_ListaVentasParaGridPagos, "%" + textBox1.Text + "%", ini, fin);
        }
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            cbxdestino.Enabled = true;
            cbxnrocuenta.Enabled = false;
            cargarcaja();
        }
        private void cargarBanco()
        {
            List<banco> listacajas = bancoBLL.SelectAll();
            cbxdestino.DataSource = listacajas;
            cbxdestino.DisplayMember = "Nombre";
            cbxdestino.ValueMember = "Id";
        }
        private void cargarCuentaBanco(int idbanco)
        {
            List<cuentaBanco> listacajas = cuentabancoBLL.SelectByBanco(idbanco);
            cbxnrocuenta.DataSource = listacajas;
            cbxnrocuenta.DisplayMember = "Nrocuenta";
            cbxnrocuenta.ValueMember = "Id";
        }
        private void cargarcaja()
        {
            List<caja> listacajas = cajaBLL.SelectAll();
            cbxdestino.DataSource = listacajas;
            cbxdestino.DisplayMember = "Nombre";
            cbxdestino.ValueMember = "Id";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (txtnrotransaccionventa.Text.Length != 0)
            {
                int idcompra = Convert.ToInt32(txtnrotransaccionventa.Text);
                string tipopago = "CAJA";
                int iddestino = (int)cbxdestino.SelectedValue;

                double monto = 0;
                try
                {
                    monto = Convert.ToDouble(txtmonto.Text);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "Debe ingresar un monto a pagar", "ERROR"); return;
                }
                if (monto <= 0)
                {
                    MessageBox.Show(this, "Monto a pagar debe ser mayor al 0", "ERROR");
                    return;
                }
                string gloza = txtgloza.Text;
                DateTime fecha = dtcfecha.Value;
                string nrorecibo = txtnrorecibo.Text;
                int idvendedor = (int)cbxvendedor.SelectedValue;
                double MontoPagadoActual = pagosVentaBLL.montoPagosPorVenta(idcompra);
                venta compra = ventaBLL.SelectByID(idcompra);
                if ((MontoPagadoActual + monto) > compra.Total)
                {
                    MessageBox.Show(this, "El monto que ha ingresado en mayor a la deuda actual", "ADVERTENCIA");
                    txtmonto.Focus();
                    return;
                }
                if (rbbanco.Checked)
                {
                    try
                    {
                        tipopago = "BANCO";
                        iddestino = (int)cbxnrocuenta.SelectedValue;
                        int pk = pagosVentaBLL.insertar(idcompra, idvendedor, principal.ObtenerLogueado().Id, tipopago, iddestino, nrorecibo, monto, fecha, DateTime.Now, gloza);
                        cuentaBanco cuenta = cuentabancoBLL.SelectByID(iddestino);
                        double montoActual1 = cuenta.Monto + monto;
                        cuentabancoBLL.updatemonto(cuenta.Id, montoActual1);
                        limpiarPantalla();
                        if ((MontoPagadoActual + monto) >= compra.Total)
                        {
                            MessageBox.Show(this, "La deuda ha sido cancelada en su totalidad", "REGISTRO PAGO");
                            ventaBLL.updateestadoventa(compra.Id, "PAGADO");
                        }
                        MessageBox.Show(this, "Se registro el pago correctamente Nro Pago: "+pk, "REGISTRO PAGO");
                        imprimirComprobante(pk);
                        recargarGrid();
                        return;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "No se registro el pago", "ERROR");
                    }
                }
                try
                {
                    caja caja = cajaBLL.SelectByID(iddestino);
                    double montoActual = caja.Monto + monto;
                    cajaBLL.updatemonto(iddestino, montoActual);
                    int pk = pagosVentaBLL.insertar(idcompra, idvendedor, principal.ObtenerLogueado().Id, tipopago, iddestino, nrorecibo, monto, fecha, DateTime.Now, gloza);
                    if ((MontoPagadoActual + monto) >= compra.Total)
                    {
                        MessageBox.Show(this, "La deuda ha sido cancelada en su totalidad", "REGISTRO PAGO");
                        ventaBLL.updateestadoventa(compra.Id, "PAGADO");
                    }
                    MessageBox.Show(this, "Se registro el pago correctamente Nro Pago: " + pk, "REGISTRO PAGO");
                    imprimirComprobante(pk);
                    limpiarPantalla();
                    recargarGrid();
                    return;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "No se registro el pago", "ERROR");
                }
            }
            MessageBox.Show(this, "Selecciones una compra para realizar un pago", "ERROR");
        }
        private void imprimirComprobante(int pkCompra)
        {
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            DialogResult result;
            result = MessageBox.Show(this, "Desea Imprimir ver el comprobante", "REGISTRO DE DATOS", buttons);
            if (result == DialogResult.Yes)
            {
                REPORTES.ComprobantePagoVentaWF compra = new REPORTES.ComprobantePagoVentaWF(pkCompra);
                compra.MdiParent = principal;
                compra.Show();
                return;
            }
        }
        private void RegistroPagoVenta_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'vendedorDS.vendedor_selectAll' table. You can move, or remove it, as needed.
            this.vendedor_selectAllTableAdapter.Fill(this.vendedorDS.vendedor_selectAll);

        }

        private void cbxvendedor_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void txtmonto_KeyPress(object sender, KeyPressEventArgs e)
        {
            UTIIIDADES.UTILIDADES.soloDecimanes(e, txtmonto);
        }

        private void rbbanco_CheckedChanged(object sender, EventArgs e)
        {
            cbxdestino.Enabled = true;
            cbxnrocuenta.Enabled = true;
            cargarBanco();
            try
            {
                int cuentabanco = (int)cbxdestino.SelectedValue;
                cargarCuentaBanco(cuentabanco);
            }
            catch (Exception)
            {
                MessageBox.Show(this, "No Existen Bancos Creados", "ADVERTENCIA");
            }

        }
        private void limpiarPantalla()
        {
            txtnrotransaccionventa.Text = "";
            txtnrorecibo.Text = "";
            txtmonto.Text = "0";
            txtgloza.Text = "";
        }
        private void button2_Click(object sender, EventArgs e)
        {
            limpiarPantalla();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            recargarGrid();
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.CurrentRow != null)
            {
                int pk = (int)dataGridView1.CurrentRow.Cells[0].Value;
                double deuda = (double)dataGridView1.CurrentRow.Cells[6].Value;
                txtnrotransaccionventa.Text = pk + "";
                txtmonto.Text = deuda + "";
            }
        }

        private void cbxdestino_SelectionChangeCommitted(object sender, EventArgs e)
        {
            int cuentabanco = (int)cbxdestino.SelectedValue;
            cargarCuentaBanco(cuentabanco);
        }
       
    }
}
